/**
 * Excel导出测试文档 - 前端脚本
 * 功能：上传Excel文件，选择数据区域，导出为Word测试文档
 */

let uploadedFilename = '';  // 唯一文件名（用于后端读取）
let displayName = '';  // 显示名称（用于输出文件名）

/**
 * Excel列字母转数字函数（A=1, B=2, ..., Z=26, AA=27, ...）
 * @param {string} column - Excel列字母
 * @returns {number} 列数字
 */
function columnLetterToNumber(column) {
    column = column.toUpperCase().trim();
    let result = 0;
    for (let i = 0; i < column.length; i++) {
        result = result * 26 + (column.charCodeAt(i) - 'A'.charCodeAt(0) + 1);
    }
    return result;
}

/**
 * Excel列数字转字母函数（1=A, 2=B, ..., 26=Z, 27=AA, ...）
 * @param {number} number - 列数字
 * @returns {string} Excel列字母
 */
function columnNumberToLetter(number) {
    let column = '';
    while (number > 0) {
        let remainder = (number - 1) % 26;
        column = String.fromCharCode('A'.charCodeAt(0) + remainder) + column;
        number = Math.floor((number - 1) / 26);
    }
    return column;
}

$(document).ready(function() {
    // 自动将列输入转为大写并限制只能输入字母
    $('#startCol, #endCol').on('input', function() {
        this.value = this.value.toUpperCase().replace(/[^A-Z]/g, '');
    });
    
    // 上传Excel文件
    $('#uploadForm').on('submit', function(e) {
        e.preventDefault();
        
        const formData = new FormData(this);
        
        $.ajax({
            url: window.EXCEL_TO_WORD_URLS.upload,
            type: 'POST',
            data: formData,
            processData: false,
            contentType: false,
            success: function(response) {
                if (response.success) {
                    uploadedFilename = response.filename;  // 保存唯一文件名
                    displayName = response.display_name || '';  // 保存显示名称
                    
                    // 显示文件信息（使用原始文件名显示）
                    $('#infoFilename').text(response.original_filename || response.filename);
                    $('#infoSheetName').text(response.sheet_name);
                    $('#infoMaxRow').text(response.max_row);
                    $('#infoMaxCol').text(response.max_column);
                    $('#fileInfo').slideDown();
                    
                    // 自动设置区域范围
                    $('#endRow').val(response.max_row);
                    // 将数字列转为字母（最多支持9列）
                    let maxCol = Math.min(response.max_column, 9);
                    $('#endCol').val(columnNumberToLetter(maxCol));
                    
                    // 显示步骤2
                    $('#step2Card').slideDown();
                    
                    // 滚动到步骤2
                    $('html, body').animate({
                        scrollTop: $('#step2Card').offset().top - 100
                    }, 500);
                } else {
                    alert('上传失败：' + response.message);
                }
            },
            error: function() {
                alert('上传失败，请稍后重试');
            }
        });
    });
    
    // 执行导出
    $('#exportBtn').on('click', function() {
        // 获取列字母并转换为数字
        let startColLetter = $('#startCol').val().trim().toUpperCase();
        let endColLetter = $('#endCol').val().trim().toUpperCase();
        
        // 验证列字母输入
        if (!startColLetter || !/^[A-Z]+$/.test(startColLetter)) {
            alert('起始列必须是有效的字母（如 A、B、C）');
            return;
        }
        if (!endColLetter || !/^[A-Z]+$/.test(endColLetter)) {
            alert('结束列必须是有效的字母（如 A、B、C）');
            return;
        }
        
        // 转换为数字
        let startColNum = columnLetterToNumber(startColLetter);
        let endColNum = columnLetterToNumber(endColLetter);
        
        const data = {
            filename: uploadedFilename,  // 唯一文件名（后端用于读取文件）
            display_name: displayName,  // 显示名称（后端用于生成输出文件名）
            start_row: parseInt($('#startRow').val()),
            end_row: parseInt($('#endRow').val()),
            start_col: startColNum,
            end_col: endColNum
        };
        
        // 验证输入
        if (data.start_row > data.end_row) {
            alert('起始行不能大于结束行');
            return;
        }
        if (data.start_col > data.end_col) {
            alert(`起始列（${startColLetter}）不能大于结束列（${endColLetter}）`);
            return;
        }
        
        // 验证层级数
        let levels = data.end_col - data.start_col + 1;
        if (levels > 9) {
            alert(`层级数量（${levels}）超过最大支持数（9），请调整列范围`);
            return;
        }
        
        // 禁用按钮
        $(this).prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i> 处理中...');
        
        $.ajax({
            url: window.EXCEL_TO_WORD_URLS.export,
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify(data),
            success: function(response) {
                $('#exportBtn').prop('disabled', false).html('<i class="fas fa-file-export"></i> 开始导出');
                
                if (response.success) {
                    const details = response.details;
                    const resultHtml = `
                        <div class="alert alert-success">
                            <h5><i class="fas fa-check-circle"></i> 导出成功！</h5>
                            <ul class="mb-3">
                                <li><strong>总层级数：</strong>${details.total_levels}</li>
                                <li><strong>处理行数：</strong>${details.processed_rows}</li>
                                <li><strong>成功插入表格：</strong>${details.success_count} 个</li>
                                <li><strong>失败次数：</strong>${details.fail_count} 次</li>
                            </ul>
                            <a href="${window.EXCEL_TO_WORD_URLS.download}/${response.filename}" 
                               class="btn btn-success">
                                <i class="fas fa-download"></i> 下载Word文档
                            </a>
                        </div>
                    `;
                    $('#resultContent').html(resultHtml);
                    $('#resultCard').slideDown();
                    
                    // 滚动到结果
                    $('html, body').animate({
                        scrollTop: $('#resultCard').offset().top - 100
                    }, 500);
                } else {
                    alert('导出失败：' + response.message);
                }
            },
            error: function(xhr) {
                $('#exportBtn').prop('disabled', false).html('<i class="fas fa-file-export"></i> 开始导出');
                const response = xhr.responseJSON;
                alert('导出失败：' + (response ? response.message : '未知错误'));
            }
        });
    });
});

